package org.example.config;

import org.example.intercerpt.CookieInterceptor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class GlobalConfig implements WebMvcConfigurer {
    // 从配置文件读取外部头像目录
    @Value("${avatar.path}")
    private String avatarExternalPath;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 关键：映射 URL 路径 "/avatars/**" 到外部目录（注意路径格式需加 "file:" 前缀）
        registry.addResourceHandler("/avatars/**")
                .addResourceLocations("file:" + avatarExternalPath);
    }

//    @Override
//    public void addCorsMappings(CorsRegistry registry) {
//        registry.addMapping("/**") // 所有接口
//                .allowedOrigins("http://localhost:5173") // 允许的前端域名
//                .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的请求方法
//                .allowedHeaders("*") // 允许的请求头
//                .allowCredentials(true)
//                .exposedHeaders("Set-Cookie");
//    }

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();

        // 1. 允许的前端源（必须指定具体源，不能用*，否则credentials不生效）
        config.addAllowedOrigin("http://localhost:5173");

        // 2. 允许携带凭证（cookie）
        config.setAllowCredentials(true);

        // 3. 允许的请求方法
        config.addAllowedMethod("*");

        // 4. 允许的请求头
        config.addAllowedHeader("*");

        // 5. 暴露响应头（如果前端需要读取自定义头）
        config.addExposedHeader("Set-Cookie");

        // 6. 预检请求缓存时间（减少OPTIONS请求次数）
        config.setMaxAge(3600L);

        // 对所有接口生效
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册自定义拦截器，并配置拦截路径
        registry.addInterceptor(new CookieInterceptor())
                .addPathPatterns("/**") // 拦截所有请求（根据需要调整路径）
                .excludePathPatterns("/login", "/avatars/**"); // 可选：排除不需要拦截的路径
    }



}
